<?php
session_name("GVDECOMMERCEGERENCIADOR");
session_start();

class Captcha
{
	private $Imagem;
	private $Altura;
	private $Largura;
	private $Texto;
	private $Fonte;
	private $ColecaoTexto = array();
	private $CorMinimo = 0;
	private $CorMaximo = 255;

	public function Captcha($lagura = 150, $altura = 50)
	{

		$this->Altura = $altura;
		$this->Largura = $lagura;
		$this->CriarImagem();
		$this->ObterImagem();
	}
	
	private function CriarImagem()
	{
		$this->Imagem = imagecreate($this->Largura, $this->Altura);
		imagecolorallocate($this->Imagem,255,255,255);
	}	
	
	private function ObterTexto()
	{
		
		$caracteres = "ABCDEFGHIJLMNOPQRSTUVXZYWKabcdefghijlmnopqrstuvxzywk0123456789";
        $texto = "";
        for($contador = 0;$contador < 300;$contador++)
        {
                $rand = rand(0,63);
                $texto .= substr($caracteres,$rand,1);
        }
        
		$this->DefinirFonte();
		$this->Texto = $texto;
		$this->ColecaoTexto = str_split($this->Texto,1);
		$contador = 10;
		$this->Texto = '';
		foreach ($this->ColecaoTexto as $letra)
		{
			$cor = $this->GerarCor($minimo = 0, $maximo = 180);
			imagestring($this->Imagem, $this->Fonte, $contador, rand(-5, $this->Altura - 40),  $letra, $cor);
			$contador += rand(15,30); 
			
			$this->Texto .=  $letra;
			
			if($contador > $this->Largura - 30)
			{
				break;
			}
		}
		$_SESSION['CodigoCaptcha'] = $this->Texto;
	}
	
	private function ObterImagem()
	{
		header("Content-type: image/png");
		
		$this->CalcularProporcao();
		
		$this->CriarCirculos();
		
		$this->ObterTexto();
		
		$this->CriarLinhas();
		
		$this->CriarBorda();
		
		imagepng($this->Imagem);
	}
	
	private function CriarBorda()
	{
		imagerectangle($this->Imagem,0,0,$this->Largura - 1, $this->Altura - 1,  imagecolorallocate($this->Imagem,100,100,100));
		
	}
	
	private function CriarCirculos()
	{
		for($contador = 0; $contador <= $this->Proporcao; $contador ++)
		{
			$corElipse = $this->GerarCor();
			
			$posicaoX = rand(0,$this->Largura);
			$posicaoY = rand(0,$this->Altura);
			
			imagefilledellipse   ( $this->Imagem  , $posicaoX  , $posicaoY  , 7  , 7  , $corElipse);
		}
	}
	
	private function CriarLinhas()
	{
		for($contador = 0; $contador <= $this->Proporcao; $contador ++)
		{
			$corLinha = $this->GerarCor();
			imageline   ( $this->Imagem  , rand(0,$this->Largura)  , rand(0,$this->Altura)  , rand(5,$this->Largura)  , rand(5,$this->Altura)  , $corLinha);
		}
	}
	
	private function GerarCor($minimo = 100, $maximo = 255)
	{
		return $this->Cor = imagecolorallocate($this->Imagem ,rand($minimo, $maximo),rand($minimo, $maximo ),rand($minimo, $maximo));
	}
	
	private function CalcularProporcao()
	{
		$proporcaoY = ($this->Largura) * (15 / 100);
		$proporcaoX = ($this->Altura) * (15 / 100);
		
		$this->Proporcao = (($proporcaoX + $proporcaoY) * (50 / 100));
	}
	
	public function DefinirFonte($fonte = "anonymous.gdf")
	{
		$this->Fonte = imageloadfont("anonymous.gdf");		
	}
}
new Captcha(119,40);
?>